﻿using System;

namespace Zo.Tasks
{
    /// <summary>
    /// 多线程任务。
    /// </summary>
    public class ThreadTask
    {
        /// <summary>
        /// 多线程任务的实例。
        /// </summary>
        private static readonly ThreadTask _instance = new ThreadTask();

        /// <summary>
        /// 当前任务。
        /// </summary>
        public static IThreadTask Current => _instance.InnerCurrent;

        /// <summary>
        /// 当前任务。
        /// </summary>
        private IThreadTask InnerCurrent { get; set; } = new DefaultThreadTask();

        /// <summary>
        /// 设置当前使用的任务。
        /// </summary>
        /// <param name="task">任务。</param>
        public static void Set(IThreadTask task) => _instance.InnerSet(task);

        /// <summary>
        /// 设置当前使用的任务。
        /// </summary>
        /// <param name="task">任务。</param>
        private void InnerSet(IThreadTask task)
        {
            if (task == null)
                throw new ArgumentNullException(nameof(task));

            InnerCurrent = task;
        }
    }
}